package com.party.core.service.log.impl;

import com.google.common.collect.Maps;
import com.party.common.paging.Page;
import com.party.core.dao.read.log.LogEventReadDao;
import com.party.core.dao.write.log.LogEventWriteDao;
import com.party.core.model.log.LogEvent;
import com.party.core.model.log.LogEventQuery;
import com.party.core.service.log.ILogEventService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * 日志接口服务
 * Created by wei.li
 *
 * @date 2017/9/5 0005
 * @time 18:30
 */

@Service
public class LogEventService implements ILogEventService {

    @Autowired
    private LogEventReadDao logEventReadDao;

    @Autowired
    private LogEventWriteDao logEventWriteDao;


    /**
     * 日志列表
     * @param logEventQuery 日志
     * @param page 分页参数
     * @return 日志列表
     */
    @Override
    public List<LogEvent> listPage(LogEventQuery logEventQuery, Page page) {
        return logEventReadDao.listPage(logEventQuery, page);
    }

    /**
     * 获取日志详情
     * @param id 编号
     * @return 日志详情
     */
    @Override
    public LogEvent get(String id) {
        return logEventReadDao.get(id);
    }

    /**
     * 日志新增
     *
     * @param logEvent 日志信息
     * @return 编号
     */
    @Override
    public void insert(LogEvent logEvent) {
        logEvent.setTimestmp(new Date());
        logEventWriteDao.insert(logEvent);
    }

    /**
     * 删除几天前的数据
     * @param type 类型
     * @param date 几天前
     */
    @Override
    public void deleteForDate(Integer type, Integer date) {
        logEventWriteDao.deleteForDate(type, date);
    }

    /**
     * 行为列表
     * @param operatorId 操作者
     * @param date 时间
     * @return 行为列表
     */
    @Override
    public List<LogEvent> behaviorList(String operatorId, String date, Page page) {
        return logEventReadDao.behaviorList(operatorId, date,  page);
    }

    /**
     * 统计访问量
     * @param operatorId 操作者
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 访问量
     */
    @Override
    public List<HashMap<String, Object>> countByDate(String operatorId, String startDate, String endDate) {
        HashMap<String, Object> parameter = Maps.newHashMap();
        parameter.put("startDate", startDate);
        parameter.put("endDate", endDate);
        parameter.put("operatorId", operatorId);
        return logEventReadDao.countByDate(parameter);
    }

    /**
     * 统计访问量
     * @param operatorId 操作者
     * @return 访问量
     */
    @Override
    public List<HashMap<String, Object>> countByDate(String operatorId) {
        return this.countByDate(operatorId, null, null);
    }
}
